package com.reguang.enums;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * <p>Title: ResultCode</p>
 * <p>Description: 统一返回状态码</p>
 * @author weibiao
 * @date 2019年12月24日
 */
public enum ResultCode {

	/* 成功状态码 */
	SUCCESS(0, "成功"), //

	/* 参数错误：10001-19999 */
	PARAM_IS_INVALID(10001, "参数无效"), //
	PARAM_IS_BLANK(10002, "参数为空"), //
	PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"), //
	PARAM_NOT_COMPLETE(10004, "参数缺失"), //

	/* 用户错误：20001-29999 */
	USER_NOT_LOGGED_IN(20001, "用户未登录"), //
	USER_LOGIN_ERROR(20002, "账号不存在或密码错误"), //
	USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"), //
	USER_NOT_EXIST(20004, "用户不存在"), //
	USER_HAS_EXISTED(20005, "用户已存在"), //
	USER_TOKEN_NOT_FOUND(20006, "尝试获取Token变量并不存在"), //
	USER_TOKEN_VALID(20007, "请传入正确的Token"), //

	/* 业务错误：30001-39999 */
	SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, "某业务出现问题"), //

	/* 系统错误：40001-49999 */
	SERVER_INTERNAL_ERROR(40001, "系统繁忙，请稍后重试"), //
	ADDRESS_DOES_NOT_EXIST(40002, "请求地址未找到"), //

	/* 数据错误：50001-599999 */
	DATA_NOT_FOUND(50001, "数据或资源未找到"), //
	DATA_IS_WRONG(50002, "数据有误"), //
	DATA_ALREADY_EXISTED(50003, "数据已存在"), //

	/* 接口错误：60001-69999 */
	INTERFACE_INNER_INVOKE_ERROR(60001, "内部系统接口调用异常"), //
	INTERFACE_OUTTER_INVOKE_ERROR(60002, "外部系统接口调用异常"), //
	INTERFACE_FORBID_VISIT(60003, "该接口禁止访问"), //
	INTERFACE_ADDRESS_INVALID(60004, "接口地址无效"), //
	INTERFACE_REQUEST_TIMEOUT(60005, "接口请求超时"), //
	INTERFACE_EXCEED_LOAD(60006, "接口负载过高，请稍后再试"), //

	/* 权限错误：70001-79999 */
	PERMISSION_NO_ACCESS(70001, "无访问权限"), //

	/*微信类错误：80001-89999*/
	WECHAT_LOGIN_TOKEN(80001, "获取session_key及openID时异常，微信内部错误"), //

	/*缓存错误：90001-99999*/
	CACHE_READ_ERROE(90001, "缓存读取失败"), //

	/*订单类错误：100001-199999*/
	ORDER_NOT_FOUND(100001, "订单不存在"), //
	ORDER_STATUS_ERROR(100002, "订单状态异常");

	private Integer code;

	private String message;

	ResultCode(Integer code, String message) {
		this.code = code;
		this.message = message;
	}

	public Integer code() {
		return this.code;
	}

	public String message() {
		return this.message;
	}

	public static String getMessage(String name) {
		for (ResultCode item : ResultCode.values()) {
			if (item.name().equals(name)) {
				return item.message;
			}
		}
		return name;
	}

	public static Integer getCode(String name) {
		for (ResultCode item : ResultCode.values()) {
			if (item.name().equals(name)) {
				return item.code;
			}
		}
		return null;
	}

	@Override
	public String toString() {
		return this.name();
	}

	/**
	 * 
	 * <p>Title: main</p>
	 * <p>Description: 校验重复的code值</p>
	 * @param args
	 */
	public static void main(String[] args) {
		ResultCode[] ApiResultCodes = ResultCode.values();
		List<Integer> codeList = new ArrayList<Integer>();
		for (ResultCode ApiResultCode : ApiResultCodes) {
			if (codeList.contains(ApiResultCode.code)) {
				System.out.println(ApiResultCode.code);
			} else {
				codeList.add(ApiResultCode.code());
			}
		}
	}
}
